package br.lsi.supercurriculum.beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;

import br.lsi.supercurriculum.entidades.Experiencia;
import br.lsi.supercurriculum.entidades.Pessoa;
import br.lsi.supercurriculum.entidades.Profissional;
import br.lsi.supercurriculum.entidades.Usuario;
import br.lsi.supercurriculum.facades.PessoaFacadeImpl;
import br.lsi.supercurriculum.interfaces.PessoaFacade;

@ManagedBean(name = "experienciasBean")
@SessionScoped
public class ExperienciaBean implements Serializable {

	private static final long serialVersionUID = 1L;

	private Pessoa pessoa;
	private Experiencia experiencia;
	private Profissional profissional;
	private List<Experiencia> experiencias = new ArrayList();
	private PessoaFacade pessoaFacade;
	private Usuario usuario;

	public ExperienciaBean() {
		this.pessoaFacade = new PessoaFacadeImpl();
		this.novaExperiencia();
		this.getUserLogin();
	}

	public void addExperiencia(Experiencia experiencia) {
		experiencias.add(experiencia);
	}

	private void novaExperiencia() {
		pessoa = this.pessoaFacade.getPessoa(usuario);
		if (pessoa == null) {
			this.pessoa = new Pessoa();
			// this.profissional.setExperiencia(experiencia);
		}
	}

	private void getUserLogin() {
		usuario = new Usuario();
		SecurityContext context = SecurityContextHolder.getContext();
		if (context instanceof SecurityContext) {
			Authentication authentication = context.getAuthentication();
			if (authentication instanceof Authentication) {
				usuario.setUsername(((User) authentication.getPrincipal())
						.getUsername());
			}
		}
	}

	public void salvar() {
		if (pessoa != null) {
			this.pessoaFacade.salvarOuAtualizar(this.pessoa);
			this.profissional.setExperiencias(experiencias);
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage("Dados atualizados!"));

			System.out.println(this.pessoa.getNome());
		}
	}

	public List<Experiencia> getExperiencias() {
		return experiencias;
	}

	public void setExperiencias(List<Experiencia> experiencias) {
		this.experiencias = experiencias;
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public Experiencia getExperiencia() {
		return experiencia;
	}

	public void setExperiencia(Experiencia experiencia) {
		this.experiencia = experiencia;
	}

	public PessoaFacade getPessoaFacade() {
		return pessoaFacade;
	}

	public void setPessoaFacade(PessoaFacade pessoaFacade) {
		this.pessoaFacade = pessoaFacade;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

}